package com.cskaoyan.javase.oop3._2inner._2static._0introduction;

/**
 * @description: 静态内部类的基本特点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 理解成员内部类的成员特点之前,先明确以下一点:
 *      静态内部类是否相当于外围类的一个静态成员呢?
 *      不是,实际上它们两没有任何明确关系,没有特别多的关系,除了住一间屋子
 *
 *
 *
 * 静态内部类:
 *      静态内部类也是处在外围类成员位置的内部类，不同的是它需要使用static修饰
 * 可以看一段文字描述,Oracle公司官网有一段文字解释静态内部类和成员内部类的区别
 *      Nested classes that are declared static are called static nested classes.
 *          声明为静态的嵌套类称为静态嵌套类
 *      Non-static nested classes are called inner classes.
 *          非静态嵌套类称为内部类
 *      两个概念:
 *          static nested class(静态内部类)
 *              nested: 是嵌套的意思,把一个东西直接放进另一个东西里面称之为嵌套,在静态内部类当中,该内部类相当于直接放进了外围类中,它本身和外围类没有什么关系.这类似于"寄居蟹,啃老族" 本身它们是可以独立的,但是不独立,而是借助别人保护自己
 *              ---> 静态内部类也是这样的,它本身完全可以做独立的类,但是要借助外围类的"壳子"保护自己
 *
 *          inner class(成员内部类):
 *              inner: 是内部的意思,只有和外部有绝对的关联才能称之为内部.比如"心脏"和身体,"CPU"和电脑
 *                  成员内部类意味着它依赖于外围类,想要创建成员内部类对象,必须先创建外部类对象
 *
 * 语法:
 *      [访问权限修饰符] class EnclosedClazz{ //外围（普通）类的访问权限修饰符，只有两个，public和缺省
 * 	[访问权限修饰符] static class InnerClazz{//内部类访问权限修饰符，有四个，和普通成员一样
 *     }
 * }
 *
 * > 静态内部类自身的特点
 * > 1，访问权限修饰符
 *      静态内部类仍然是处在一个类的成员位置的内部类,它拥有四种访问权限,这一点和成员内部类一致
 *
 * > 2，成员特点
 *      它本身就是一个正常类,和普通类成员一模一样,没有任何区别
 *
 * > 3，继承和实现
 *      仅做了解,这一点和普通成员内部类是一致的
 *      唯一的区别是,它只能继承内部的静态内部类,不能继承成员内部类
 *
 */
public class Demo {
}

class EnclosedClazz {

    static class A {
    }

    //定义静态内部类
    static class StaticInner extends A {
        int a;
        static int b;
        static final int C = 20;

        public static void test() {
        }

        static {
        }

        public StaticInner(int a) {
            this.a = a;
        }
    }
}
